home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / dev / amos / AMOS_0795.lzh / AMOSLIST / 000116_amos-request@svcs1.digex.net_Sat Jul 22 17:06:43 1995.msg < prev    next >
Internet Message Format  |  1995-08-04  |  7KB

  1. Received: from svcs1.digex.net (svcs1.digex.net [204.91.197.224]) by mail1.access.digex.net (8.6.12/8.6.12) with ESMTP id RAA22761;  for  ; Sat, 22 Jul 1995 17:06:41 -0400
  2. Received: (from daemon@localhost) by svcs1.digex.net (8.6.12/8.6.12) id OAA11531 for amos-out; Sat, 22 Jul 1995 14:49:55 -0400
  3. Received: from mail1.access.digex.net (mail1.access.digex.net [205.197.247.2]) by svcs1.digex.net (8.6.12/8.6.12) with ESMTP id OAA11528 for <amos-list@svcs1.digex.net>; Sat, 22 Jul 1995 14:49:54 -0400
  4. Received: from nyquist.ee.ualberta.ca (sikorsky@nyquist.ee.ualberta.ca [129.128.16.198]) by mail1.access.digex.net (8.6.12/8.6.12) with ESMTP id OAA15651;  for <amos-list@access.digex.net> ; Sat, 22 Jul 1995 14:49:52 -0400
  5. Received: by nyquist.ee.ualberta.ca
  6.     (1.37.109.16/15.6) id AA004828985; Sat, 22 Jul 1995 12:49:45 -0600
  7. Date: Sat, 22 Jul 1995 12:49:45 -0600 (MDT)
  8. From: Mike Sikorsky <sikorsky@ee.ualberta.ca>
  9. To: Clarence Bakirtzidis <s9506574@yallara.cs.rmit.edu.au>
  10. Cc: amos-list@access.digex.net
  11. Subject: Re: Too many IF's!
  12. In-Reply-To: <199507210828.SAA02320@yallara.cs.rmit.edu.au>
  13. Message-Id: <Pine.HPP.3.91.950722121658.12103B-100000@nyquist.ee.ualberta.ca>
  14. Mime-Version: 1.0
  15. Content-Type: TEXT/PLAIN; charset=US-ASCII
  16. Status: RO
  17. X-Status: 
  18.  
  19. On Fri, 21 Jul 1995, Clarence Bakirtzidis wrote:
  20.  
  21. >     I was just wondering if it is typical for a main loop of a game to
  22. > consist of MANY "if" statements?  
  23.  
  24.     it depends... 
  25.  
  26. > I am worried my main loop might become slow,
  27. > but it is the only way I can think of to achieve what I want.  I chose to
  28. > do everything the hard way, without AMAL.  But now I am thinking of using AMAL
  29. > to control some parts of the game, because it is too hard to do it another
  30. > way without using a LOT of IF statements and flags to keep track of
  31. > things in the game.  Any suggestions?  
  32.  
  33.     I would use your main loop to handle the game flow (ie. Bob Update
  34.     Off/On, screen scrolling, collison detection etc.) and your Main 
  35.         Character (the main guy/gal usally requires more flexibilty than
  36.     AMAL provides normally... )
  37.  
  38.     I would then use AMAL to handle the anything else that moves..
  39.     ie. bad guys/paltforms.. 
  40.  
  41.     What I do is handle AMAL myself.. you disable AMAL but set up
  42.     your own interrupt (ie. Every 2 or something) and have this
  43.     interrupt call your Enemy handler, at the beginning of
  44.     the  routine, disable your interrupt (Every Off) and Enable
  45.     it at the exit (Every On).. you don't want to be interrupted
  46.     inside your interrupt routine :) Oh ya make the second
  47.     last instruct Synchro (ie. Amal GO )
  48.  
  49.     What I do then, is update the AMAL registers of the active
  50.     objects.. for example.. you could check to see if an
  51.     enemy should fall (ie. there is no soilid object under
  52.     it's feet -- walked off a platform perhaps :) )
  53.  
  54.     If it the enemy should fall you can set a particular register
  55.     to 1 (ie. Amreg(object,0) = 1)... With Amal automatic updating
  56.     of you can have 64 channels all with a set of their own register..
  57.  
  58.     Some object may need more register than others and have different
  59.     meanings so you should also give your objects a type.. then
  60.     all you need is one enemy handler to get everything working..
  61.  
  62.     You also need to launch your enemies.. this could be included
  63.     with your map data or something.. 
  64.  
  65. > When people make commercial games, do
  66. > they use techniques similar to AMAL, i.e. run things under interrupt, or do
  67. > they do it by using flags and counters to carry out something (like an
  68. > explosion) which would last for several game loops?  Because keeping track
  69. > of say two players, several baddies, bullets, explosions and other things
  70. > without running them under interrupt seems like a very daunting task to me...
  71.  
  72.     I can't say for sure.. but I would say Interrupts.. it's too
  73.     much to 'control' in one loop properly.. you don't even need
  74.     Amal.. you could code your own version..
  75.  
  76.             mike
  77.  
  78. P.S. I don't know if this will of use to anyone but here is how I
  79.      handled Goomba's in my SMB game.. Basically I had an _ENEMY_LAUNCH
  80.      routine that set up the enemy... then in the _ENEMY_HANDLER
  81.      routine I just looped through the active enemies either deleting
  82.      them (ie. fell to death) or updating registers..
  83.  
  84.  
  85. '******************************************* 
  86. '
  87. 'Enemy var's:  
  88. '
  89. Dim _ENEMY_TABLE(64),_ENEMY_JUMP_HEIGHTS(110)
  90. '
  91. '  
  92. '      _ENEMY_TABLE()     --> indexed is equal to amal channel this 
  93. enemy  
  94. '                             is on.     
  95. '                             value holds the type of this enemy.  
  96. '
  97. '      _ENEMY_JUMP_HEIGHTS--> array of height values for enemies...
  98. '
  99. '      _NEXT_ENEMY_OFFSET --> holds the offset into the '_Enemy_Bank'  
  100. '                             where the next enemy struct is to be 
  101. '                             read from... will be equal to:   
  102. '                             (_MAP_L_OFFSET)*4 bytes (ie. current col 
  103. '                             plus size of 1 entry in the enemy bank)
  104. '
  105. '      GOOMBA$            --> Amal Def'n of a Goomba...
  106. '
  107. '
  108.  
  109. '
  110. ' GOOMBA Register Defs:  
  111. '  
  112. ' Properties: Always Moving Left or Right... possibility of being
  113. '             bumped into air... also falls off edges..
  114. '
  115. ' R0 = last direction --> used to figure out whether to get oppsite X 
  116. '      step Dir.
  117. ' R1 = reserved  
  118. ' R2 = X step Direction (+-1)
  119. ' R3 = Y step Direction (+-1)
  120. ' R4 = Flag --> 0 means okay to move left // 1 means okay to move right  
  121. ' R5 = reseved 
  122. ' R6 = Flag --> 0 means can't move up // 1 means can move up 
  123. ' R7 = Flag --> 0 means can't move down // 1 means can move down 
  124. ' R8 = array index... indexes into the _ENEMY_JUMP_HEIGHTS() array...
  125. '      this gives the values when jumping/falling... 
  126. '      initially it should point to the Fall Point... which would be 
  127. '      somewhere in the middle where the ZERO's are... 
  128. ' R9 = reserved
  129. '
  130.  
  131. GOOMBA$=""
  132. GOOMBA$=GOOMBA$+"Anim 0,(1,2)(2,2)(3,2) ; Let R0=R4 ; Let R8=20 ; "
  133. GOOMBA$=GOOMBA$+"Main:   If R0<>R4 Jump Switchdirs else ; Let X=X+R2 ; Jump Checky ; "
  134. GOOMBA$=GOOMBA$+"Checky: If R3<0 Jump Up else ; Jump Down ;"
  135. GOOMBA$=GOOMBA$+"Up:     If R6=0 Jump Fix ; else  Let Y=Y+R3 ; Let R8=R8+1 ; Jump Main ; Pause ;"
  136. GOOMBA$=GOOMBA$+"Down:   If R7=0 Jump Fix ; else  Let Y=Y+R3 ; Let R8=R8+1 ; Jump Main ; Pause ;"
  137. GOOMBA$=GOOMBA$+"Fix:    Let R8=20 ; Jump Main ;"
  138. GOOMBA$=GOOMBA$+"Switchdirs: Let R2=R2*-1 ; Let R0=R4 ; Pause ; Jump Main ;"
  139.  
  140. For T=0 To 64
  141.     _ENEMY_TABLE(T)=0 : Rem Initialize Enemy Table to 0 ie. no enemies...
  142. Next 
  143.  
  144. _NEXT_ENEMY_OFFSET=0 : Rem Start it at column 0 
  145.  
  146.  
  147. '
  148. '********************* Set Enemy Jump Heights *****************
  149. '  
  150. 'Dim _ENEMY_JUMP_HEIGHTS(110)
  151. Restore ENEMY_JH
  152. For T=0 To 110
  153.    If T<35
  154.    Read _ENEMY_JUMP_HEIGHTS(T)
  155.    Else 
  156.         _ENEMY_JUMP_HEIGHTS(T)=2
  157.    End If 
  158. Next 
  159.  
  160. ENEMY_JH: Data 
  161. -4,-4,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,4,4
  162. '****************************************************************
  163.